package model;
import java.util.ArrayList;
/**
 * Class DVDCon - en liste af dvd'er
 * 
 * Klassen er en del af programmet DVD lending
 * DVD lending er et udlånssystem, som er textbaseseret UI.
 * 
 * DVD list repræsentere en DVD liste i vores system, 
 * der indeholder DVD'er, som har en liste over kopier.
 * 
 * @author Ole, Silas, Danny, Alex, Anders, Ronnie
 * 
 */
public class DVDCon
{
    //Instance variables

    private ArrayList<DVD> dvdList;
    private static DVDCon instance;
    private DVD myDVD;
    /**
     * Constructor for objects of class DVDCon
     */
    public DVDCon()
    {
        //der laves en arrayList som skal indeholde objekter af typen Person.
        dvdList = new ArrayList<DVD>();

    }

    /**
     * Object af typen DVD, addes til ArrayListen
     */
    public void addDVD(DVD d){
        DVD currentD = null;
        int i=0;
        boolean found = false;
        String search = d.getTitle();
        if(dvdList.isEmpty())
        {
            dvdList.add(d);
            System.out.println("Personen er opretttet");
        }
        else
        {
            while (!found && i<dvdList.size()){
                if (dvdList.get(i).getTitle().equals(search)){
                    found = true; //hvis fundes, returneres true
                    System.out.println("En DVD med den titel findes allerede");
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }

            if(found==false)
            {
                dvdList.add(d);
                System.out.println("DVD'en er oprettet");
            }
        }
    }

    /**
     * Object af typen DVD, fjernes fra ArrayListen
     */
    public void removeDVD(DVD d)
    {
        dvdList.remove(d);
    }

    /**
     * Der findes en DVD på baggrund af DVD'ens title
     * @param title Finder en DVD ud fra title
     * @return Returnerer en DVD
     */
    public DVD findDVD(String title){
        DVD currentD = null;
        int i=0;
        boolean found = false;
        if(dvdList.isEmpty()) // hvis listen er top behøver den ikke at søge listen igennem.
        {

        }
        else
        {
            while (!found && i < dvdList.size()){
                if (dvdList.get(i).getTitle().equals(title)){
                    currentD = dvdList.get(i);
                    found = true; //hvis fundes, returneres true
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }
        }
        return currentD; //Her returneres en person
    }

    /**
     * Denne metode skal oprette ny DVD container
     * hvis der ikke findes nogen på runtime(når metoden kaldes)
     * @return Returnerer instance
     */
    public static DVDCon getInstance(){
        if(instance == null){
            instance = new DVDCon();
        }
        return instance;
    }

    /**
     * Denne metode printer hver af DVD'ernes oplysninger ud fra listen
     */
    public void listDVD()
    {
        if(dvdList.isEmpty())
        {
            System.out.println("Listen er tom");
        }
        else
        {
            for (int i = 0; i < dvdList.size(); i++)
            {
                System.out.println("DVD " + "\n");
                dvdList.get(i).getInfo();
            }
        }
    }

    /**
     * Metoden removeCopy fjerner objektet Copy fra DVD'ens array af kopier
     */
    public void removeCopy(Copy c)
    {
        int i = 0;
        boolean found = false;
        while(!found && i < dvdList.size())
        {
            String serialNumber = c.getSerialNumber();
            if(dvdList.get(i).findCopy(serialNumber).equals(c))
            {
                dvdList.get(i).removeCopy(c);
                found = true;
            }
            else
            {
                i++;
            }
        }
    }

    /**
     * Metoden findCopy returnerer objektet Copy hvis der findes en kopi med det serienummer
     * @param serialNumber Finder en copy ud fra serialNumber
     * @return Returnerer en copy
     */
    public Copy findCopy(String serialNumber)
    {
        Copy currentC = null;
        if(!dvdList.isEmpty())
        {
            for(int i = 0; i < dvdList.size(); i++)
            {
                currentC = dvdList.get(i).findCopy(serialNumber);
            }
        }
        return currentC;
    }

}
